<?php
	//
	// Retourne le nom du dossier courant
	//
	function current_dirname(){
		return end(explode('/', dirname(!empty($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : !empty($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : str_replace('\\','/',__FILE__))));
	}
	//
	// Retourne le nom d'un fichier ou dossier
	// d'après son url
	//
	function filename($path){
		return substr(strrchr($path, "/"), 1);
	}
	//
	// Retourne le chemin relatif de $depart à $arrivee
	//
	function get_relative_path($depart, $arrivee){
		//
		$firstPathParts = explode(DIRECTORY_SEPARATOR, $depart);
		$secondPathParts = explode(DIRECTORY_SEPARATOR, $arrivee);
		//
		$sameCounter = 0;
		for($i = 0; $i < min( count($firstPathParts), count($secondPathParts) ); $i++) {
			if( strtolower($firstPathParts[$i]) !== strtolower($secondPathParts[$i]) ) {
				break;
			}
			$sameCounter++;
		}
		if( $sameCounter == 0 ) {
			return $arrivee;
		}
		//
		$newPath = '';
		for($i = $sameCounter; $i < count($firstPathParts); $i++) {
			if( $i > $sameCounter ) {
				$newPath .= DIRECTORY_SEPARATOR;
			}
			$newPath .= "..";
		}
		if( count($newPath) == 0 ) {
			$newPath = ".";
		}
		for($i = $sameCounter; $i < count($secondPathParts); $i++) {
			$newPath .= DIRECTORY_SEPARATOR;
			$newPath .= $secondPathParts[$i];
		}
		//
		return $newPath;
	}
	//
	// Affiche une liste du contenu d'un dossier
	//
	function list_dir($chemin, &$str, $depth=0){
		$ident = '	';
		$nom_repertoire = $chemin;
		$pointeur = opendir($nom_repertoire);
		$str .= str_repeat($ident,$depth);
		$str .= "<ul>$nom_repertoire \n";
		while(false !== ($fichier = readdir($pointeur))){
			if(($fichier !== '.') && ($fichier !== '..')){
				$depth++;
				$str .= str_repeat($ident,$depth);
				$str .= "<li> \n";
				if(is_dir($nom_repertoire.'/'.$fichier)){
					$depth++;
					list_dir($nom_repertoire.'/'.$fichier, $str, $depth);
					$depth--;
				}else{
					$depth++;
					$str .= str_repeat($ident,$depth);
					$str .= $fichier."\n";
					$depth--;
				}
				$str .= str_repeat($ident,$depth);
				$str .= "</li> \n";
				$depth--;
			}
		}
		$str .= str_repeat($ident,$depth);
		$str .= "</ul> \n";
		closedir($pointeur);
		return ;
	}
	//
	//Efface une ligne dont le contenu correspond à pattern
	//dans  $file
	//
	function rm_line_regex($file,$pattern){
		if($file_array = file($file)){
			for ($i = 0; $i< count($file_array); $i++){ 
				if (preg_match($pattern,trim($file_array[$i]))) {
					//echo $file_array[$i];
					unset($file_array[$i]);
				}
			}
			$newRecord = implode('',$file_array);
			if($fp = fopen($file,'w')){
				if(!fwrite($fp,utf8_encode($newRecord))) return false;
				fclose($fp);
			}else{
				return false;
			}
		}else{
			return false;
		}
		return true;
	}
	//
	// copie un repertoire et son contenu recursivement
	//
	function cp_dir($source, $dest, $overwrite = false){
		if($handle = opendir($source)){
			while(false !== ($file = readdir($handle))){
				if($file != '.' && $file != '..'){
					$src_path = $source.DIRECTORY_SEPARATOR.$file;
					$dest_path = $dest.DIRECTORY_SEPARATOR.$file;
					if(is_file($src_path)){
						if(!is_file($dest_path) || $overwrite){
							if(!@copy($src_path, $dest_path)){
								echo '<font color="red">File ('.$src_path.') <br/>';
								echo 'could not be copied into '.$dest_path.'<br/>';
								echo 'likely a permissions problem.</font>';
							}
						}
					}elseif(is_dir($src_path)){
						if(!is_dir($dest_path)){
							// make subdirectory before subdirectory is copied
							mkdir($dest_path);
						}
						cp_dir($src_path, $dest_path, $overwrite);
					}
				}
			}
			closedir($handle);
		}
	}
	//
	//Supprime un fichier ou un dossier et son contenu
	//Necessite rmdir_r
	//
	function delete($file){
		if(is_dir($file)){
			if(rmdir_r($file)) return true;
		}else if(is_file($file)){
			if(unlink($file)) return true;
		}
		return false;
	}
	//
	//Supprime un dossier et son contenu
	//
	function rmdir_r($dossier, $output=true){
		$exceptions = array('.','..');
		$sourcedir = opendir($dossier);
		while(false !== ($filename = readdir($sourcedir))){
			if(!in_array($filename, $exceptions)){
				if($output){
					echo "Processing: ".$dossier.DIRECTORY_SEPARATOR.$filename."<br>";
				}
				if(is_dir($dossier.DIRECTORY_SEPARATOR.$filename)){
					// recurse subdirectory; call of function recursive
					rmdir_r($dossier.DIRECTORY_SEPARATOR.$filename);
				}else if(is_file($dossier.DIRECTORY_SEPARATOR.$filename)){
					// unlink file
					unlink($dossier.DIRECTORY_SEPARATOR.$filename);
				}
			}
		}
		closedir($sourcedir);
		return rmdir($dossier) ? true : false;
	}
	//
?>